local a = 1 -- 限定只能在当前作用域下使用
b = 2 -- 全局变量
print(a)
print(c) -- 未初始化的变量默认 nil
a, b, c = 1, 2 -- 多重赋值

print(_VERSION) -- Lua 5.1
print("ssasas搜索") -- chcp 65001

str1 = "aaa\nbbb" -- 转义字符
print(str1)

str2 = [[
aaaaaaaaaaaa
aasssssssssss
\n
]] -- 多行文本，不转义字符
print(str2)

print(str1 .. str2) -- 字符串连接

-- 类型转换
c = tostring(10)
c = tonumber("10") -- 准换失败返回nil

print(#str1)       -- 返回字符串长度

-- 第一种函数声明
function f1(a, b)
    print(a, b)

    return a, b -- 返回多个值
end

local i, j = f1(1, 2)
print(i, j)

-- 第二种函数声明
f2 = function()

end

-- 普通table
a = { 34, "ac", {}, function() end }
a[6] = 123
print(a[1]) -- 下标默认从1开始
print(#a)   -- 获取table的长度

-- 使用table自带函数
table.insert(a, "222")
table.remove(a, 2)

-- 带key的table
a = {
    a = 100,
    b = "1234",
    c = function()

    end,
    d = 1222433,
    [",;"] = 123
}

-- 访问table的2种方式
print(a["a"])
print(a.b)
print(a[",;"])

a["abc"] = "aaaasss"

-- 全局表，能直接访问全局变量
d = "全局变量"
print(_G["d"])

-- table.insert(a, "222")
print(_G["table"]["insert"])

-- 逻辑判断
a = true
b = false
print(1 > 2)
print(1 ~= 2) -- 不等于

print(a and b)
print(a or b)
print(not a)
-- lua 中 false 和 nil代表假，0代表真

-- 短路逻辑
b = 0
print(b > 10 and "yes" or "no")

-- 判断语句
if 1 > 10 then
    print("1>10")
elseif 1 < 10 then
    print("1<10")
else
    print("no")
end

-- 0代表真
if 0 then
    print("0 is true")
end

-- for循环
for i = 1, 10, 2 do
    print(i)
    if i == 5 then
        break
    end
end

print("\n")

-- while 循环
local n = 10
while n>1 do
    if n==5 then break end
    print(n)
    n = n-1
end

-- lua中没有自增

-- 字符串扩充
s = string.char(0x30, 0x00, 0x31, 0x32,0x33)
n = string.byte(s,2)
print(n, #s)

-----------------------------------------------------------------------------------------
-- 运行指定的文件，不带扩展名
-- 带层级引用，只运行一次
_G.count = 123
require("test.test2")
require("test.test2")
local a1 = require("test.test2")
print(a1)
print(_G.count)

-- require 从package.path 路径中查找
-- .\?.lua (require 自动匹配 .lua 后缀文件)
print(package.path)
package.path = package.path .. ";./path/?.lua"
require("test.test2")

-- 使用 require 文件中的函数
local t3 = require("test.test1")
t3.say()

-- 迭代器，遍历table
t = {"a", "b", "c"}
for index, value in ipairs(t) do
    print(index, value)
end

t = {
    [1]="a",
    [2]="b",
    [3]="c",
    [5]="d"
}

-- 如果key不连续会中断
for index, value in ipairs(t) do
    print(index, value)
end

-- 遍历出所有的
for index, value in pairs(t) do
    print(index, value)
end

-- pairs底层是使用next实现，通过next可以判断空table
t4 = {}
print(next(t4))

require("test.test3")